import axios from "axios";
// import router from "@/router";
import Vue from "vue";

axios.defaults.timeout = 5000;
axios.defaults.baseURL = process.env.VUE_APP_BASE_API; //填写域名
// axios.defaults.baseURL = "http://8.154.36.212:8181"; //填写域名

// request 拦截器
// 可以自请求发送前对请求做一些处理,比如统一加token，对请求参数统一加密
axios.interceptors.request.use(
  (config) => {
    config.headers["Content-Type"] = "application/json;charset=utf-8";
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// response 拦截器
// 可以在接口响应后统一处理结果
axios.interceptors.response.use(
  (response) => {
    let res = response.data;
    // 如果是返回的文件
    if (response.config.responseType === "blob") {
      return res;
    }
    // 兼容服务端返回的字符串数据
    if (typeof res === "string") {
      res = res ? JSON.parse(res) : res;
    }
    return res;
  },
  (error) => {
    console.log("err" + error); // for debug
    return Promise.reject(error);
  }
);

/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */

export function get(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params,
      })
      .then((response) => {
        resolve(response.data);
      })
      .catch((err) => {
        reject(err);
      });
  });
}

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function post(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, data)
      .then((response) => {
        if (response.errcode === 0) {
          resolve(response.data);
        } else {
          // Vue.prototype.$message.error(response.errmsg);
          reject(response.errmsg);          
        }
      })
      .catch((err) => {
        reject(err)
        // Vue.prototype.$message.error(err);
      });
    // if(JSON.stringify(data) !== '{}') {
    //   axios.post(url, data)
    //   .then(response => {
    //     if( response.code === 0) {
    //       resolve(response.data);
    //     }else {
    //       Vue.prototype.$message.error(response.msg)
    //     }
    //   }).catch(err => {
    //     Vue.prototype.$message.error("请检查网络或联系管理员")
    //   })
    // }else {
    //   axios.post(url)
    //   .then(response => {
    //     if( response.code === 0) {
    //       resolve(response.data);
    //     }else {
    //       Vue.prototype.$message.error(response.msg)
    //     }
    //   }).catch(err => {
    //     Vue.prototype.$message.error("请检查网络或联系管理员")
    //   })
    // }
  });
}

/**
 * 封装formData post请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function formPost(url, formData = {}) {
  return new Promise((resolve) => {
    axios({
      url: url,
      method: "POST",
      header: {
        "Content-Type": "multipart/form-data",
        "X-Access-Token": sessionStorage.getItem("token"),
      },
      data: formData,
    })
      .then((response) => {
        if (response.code === 0) {
          resolve(response.data);
        } else {
          Vue.prototype.$message.error(response.msg);
        }
      })
      .catch(() => {
        Vue.prototype.$message.error("请检查网络或联系管理员");
      });
  });
}

/**
 * 封装patch请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function patch(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.patch(url, data).then(
      (response) => {
        resolve(response.data);
      },
      (err) => {
        reject(err);
      }
    );
  });
}

/**
 * 封装put请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function put(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.put(url, data).then(
      (response) => {
        resolve(response.data);
      },
      (err) => {
        reject(err);
      }
    );
  });
}

// export default request
